def generate_circle_coordinates(radius):
    coordinates = []
    x = radius
    y = 0
    p = 1 - radius  # Initial decision parameter

    # Add the initial point in each octant to the coordinates list
    add_coordinates(coordinates, x, y)

    while x > y:
        y += 1

        # Mid-point is inside or on the perimeter
        if p <= 0:
            p = p + 2 * y + 1
        else:
            x -= 1
            p = p + 2 * y - 2 * x + 1

        # All the perimeter points have already been added
        if x < y:
            break

        # Add the generated point and its reflection in the other octants to the coordinates list
        add_coordinates(coordinates, x, y)
        if x != y:
            add_coordinates(coordinates, y, x)

    return coordinates

def add_coordinates(coordinates, x, y):
    # Add points in all octants to the coordinates list
    coordinates.append((x, y))
    coordinates.append((-x, y))
    coordinates.append((x, -y))
    coordinates.append((-x, -y))
    coordinates.append((y, x))
    coordinates.append((-y, x))
    coordinates.append((y, -x))
    coordinates.append((-y, -x))
